#!/bin/bash

# sync_nginx.sh - 以 sudo 权限同步前端文件到 Nginx 目录

# 参数传入：NGINX_ROOT、用户组等环境变量需提前导出或传参
# 调用方式示例: sudo ./sync_nginx.sh /usr/share/nginx/html

set -euo pipefail

# 接收 NGINX_ROOT 作为第一个参数（推荐），或使用默认值
NGINX_ROOT="${1:-/usr/share/nginx/html}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CODE_DIR="$SCRIPT_DIR/../code"

echo "=================================="
echo "Nginx 同步脚本"
echo "目标目录: $NGINX_ROOT"
echo "代码目录: $CODE_DIR"
echo "执行用户: $(whoami)"
echo "=================================="

# 辅助函数：检查目录是否存在
check_dir() {
    if [ ! -d "$1" ]; then
        echo "❌ 错误：目录不存在 -> $1"
        exit 1
    fi
}

# 确保 Nginx 根目录存在且为目录
ensure_nginx_dir() {
    if [ -e "$NGINX_ROOT" ] && [ ! -d "$NGINX_ROOT" ]; then
        echo "🚨 $NGINX_ROOT 存在但不是目录！正在删除..."
        rm -f "$NGINX_ROOT"
    fi

    if [ ! -d "$NGINX_ROOT" ]; then
        echo "📁 创建 Nginx 静态目录: $NGINX_ROOT"
        mkdir -p "$NGINX_ROOT"
    fi

    # 设置属主（当前用户）
    chown -R $(whoami):$(whoami) "$NGINX_ROOT"
}

# 同步前端项目到 Nginx
sync_frontend() {
    local src_dist="$1"
    local dest_dir="$2"
    local name="$3"

    check_dir "$src_dist"

    # 如果目标路径存在但不是目录，先删除
    if [ -e "$dest_dir" ] && [ ! -d "$dest_dir" ]; then
        echo "⚠️ 删除非目录文件: $dest_dir"
        rm -f "$dest_dir"
    fi

    mkdir -p "$dest_dir"

    # 清空旧内容并复制新文件
    rm -rf "$dest_dir"/*
    cp -r "$src_dist"/* "$dest_dir/"
    echo "✅ $name 前端已同步到: $dest_dir"
}

# === 主流程 ===

# 确保 nginx 目录就绪
ensure_nginx_dir

# 开始同步前端
echo "📦 开始同步前端资源..."

sync_frontend "$CODE_DIR/user/dist" "$NGINX_ROOT/user" "user"
sync_frontend "$CODE_DIR/admin/dist" "$NGINX_ROOT/admin" "admin"

echo ""
echo "🎉 前端文件已成功同步至 Nginx 目录！"
